#include <stdio.h>
#include <stdlib.h>
#include "tree.h"

/*递归插入数据
 *
 *
 */

int tree_insert(tree_st **ptr,datatype data)
{
	tree_st *newnode = NULL;
//创建新的结点，如果当前结点为空，将新节点插入	
	if(*ptr == NULL)
	{
		newnode = malloc(sizeof(*newnode));
		if(newnode == NULL)
		{
			return -1;
		}
		newnode->data = data;
		newnode->lchild = NULL;
		newnode->rchild = NULL;
		*ptr = newnode;
		return 0;
	}
//如果当前结点的值大于等于要插入的值，就当前结点的左孩子中插入数据	
	if(data <= (*ptr)->data)
	{
		tree_insert(&(*ptr)->lchild,data);
	}
//如果当前结点的值小于要插入的值，就当前结点的右孩子中插入数据	
	else
	{
		tree_insert(&(*ptr)->rchild,data);
	}
}

/*查找树中的元素
 *
 */

datatype *tree_find(tree_st *ptr,datatype data)
{
	if(NULL == ptr)
	{
		return NULL;
	}
	if(ptr->data == data)
		return &ptr->data;
	if(data < ptr->data)
	{
		tree_find(ptr->lchild,data);
	}
	else
	{
		tree_find(ptr->rchild,data);
	}

}
/*将树向左倒，画出树的形状
 *@level:表示树的层级
 *@0:表示从树的第零层开始
 *先打印右子树，再打印根，最后打印左子树
 */

static void tree_draw_(tree_st *ptr,int level)
{
	if(NULL == ptr)
		return ;
	tree_draw_(ptr->rchild,level+1);
	for(int i = 0;i < level;i++)
	{
		printf("    ");
	}
	printf("%c\n",ptr->data);
	tree_draw_(ptr->lchild,level+1);
}

	void tree_draw(tree_st *ptr)
{
	tree_draw_(ptr,0);
}
